package programa;

import excepciones.ExcepcionCantidadDeJugadoresCompleta;
import excepciones.ExcepcionPresupuestoInsuficiente;

public class EquipoDelDt extends Equipo{
	
	//CONSTANTES
	int CANTIDAD_MAXIMA_DE_ARQUEROS = 2;
	int CANTIDAD_MAXIMA_DE_DEFENSORES = 5;
	int CANTIDAD_MAXIMA_DE_VOLANTES = 5;
	int CANTIDAD_MAXIMA_DE_DELANTEROS = 3;
	
	//ATRIBUTOS
	int presupuesto;
	Formacion formacion;
	
	//METODOS
	public EquipoDelDt(String unNombre, int unPresupuesto, Formacion unaFormacion){
		
		super(unNombre);
		
		this.presupuesto = unPresupuesto;
		
		this.formacion = unaFormacion;
		
	}
	
	//*************************************************************************
	
	public void agregarArquero(Jugador unArquero){
		
		if(unArquero.obtenerValorDeMercado() > this.presupuesto){
			
			new ExcepcionPresupuestoInsuficiente();
			
		}
		
		if(this.arqueros.size() == CANTIDAD_MAXIMA_DE_ARQUEROS){
			
			new ExcepcionCantidadDeJugadoresCompleta();
			
		}
		
		this.arqueros.add(unArquero);
		
		this.presupuesto -= unArquero.obtenerValorDeMercado();
		
	}
	
	//*************************************************************************
	
	public void agregarDefensor(Jugador unDefensor){
		
		if(unDefensor.obtenerValorDeMercado() > this.presupuesto){
			
			new ExcepcionPresupuestoInsuficiente();
			
		}
		
		if((this.defensores.size() == CANTIDAD_MAXIMA_DE_DEFENSORES) || (this.defensores.size() < (this.formacion.obtenerCantidadDeDefensores() + 1))){
			
			new ExcepcionCantidadDeJugadoresCompleta();
			
		}
		
		this.defensores.add(unDefensor);
		
		this.presupuesto -= unDefensor.obtenerValorDeMercado();
		
	}
	
	//*************************************************************************
	
	public void agregarVolante(Jugador unVolante){
		
		if(unVolante.obtenerValorDeMercado() > this.presupuesto){
			
			new ExcepcionPresupuestoInsuficiente();
			
		}
		
		if((this.volantes.size() == CANTIDAD_MAXIMA_DE_VOLANTES) || (this.volantes.size() < (this.formacion.obtenerCantidadDeVolantes() + 1))){
			
			new ExcepcionCantidadDeJugadoresCompleta();
			
		}
		
		this.volantes.add(unVolante);
		
		this.presupuesto -= unVolante.obtenerValorDeMercado();
		
	}
	
	//*************************************************************************
	
	public void agregarDelantero(Jugador unDelantero){
		
		if(unDelantero.obtenerValorDeMercado() > this.presupuesto){
			
			new ExcepcionPresupuestoInsuficiente();
			
		}
		
		if((this.delanteros.size() == CANTIDAD_MAXIMA_DE_DELANTEROS) || (this.delanteros.size() < (this.formacion.obtenerCantidadDeDelanteros() + 1))){
			
			new ExcepcionCantidadDeJugadoresCompleta();
			
		}
		
		this.delanteros.add(unDelantero);
		
		this.presupuesto -= unDelantero.obtenerValorDeMercado();
		
	}
	
	//*************************************************************************
	
	public boolean quitarArquero(Jugador unArquero){
		
		if(super.quitarArquero(unArquero)){
			
			this.presupuesto += unArquero.obtenerValorDeMercado();
			
		}
		
		return true;
		
	}
	
	//*************************************************************************
	
	public boolean quitarDefensor(Jugador unDefensor){
		
		if(super.quitarDefensor(unDefensor)){
			
			this.presupuesto += unDefensor.obtenerValorDeMercado();
			
		}
		
		return true;
		
	}
	
	//*************************************************************************
	
	public boolean quitarVolante(Jugador unVolante){
		
		if(super.quitarVolante(unVolante)){
			
			this.presupuesto += unVolante.obtenerValorDeMercado();
			
		}
		
		return true;
		
	}
	
	//*************************************************************************
	
	public boolean quitarDelantero(Jugador unDelantero){
		
		if(super.quitarDelantero(unDelantero)){
			
			this.presupuesto += unDelantero.obtenerValorDeMercado();
			
		}
		
		return true;
		
	}
	
	//*************************************************************************
	
}
